﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace IOExcel
{
    public partial class FrmllOStream : Form
    {
        public FrmllOStream()
        {
            InitializeComponent();
        }

        //文本文件读写  文本
        private void button1_Click(object sender, EventArgs e)
        {
            //string path = @"C:\Users\33159\Desktop\新建 文本文档.txt";
            //string pathto = @"G:\编程学习\C#\.上位机\01、【Winform+WPF+上位机高薪就业VIP班三期】\20211222就业班03期Course41IO与Excel的使用\新建 文本文档.txt";
            // string path = @"G:\编程学习\C#\.上位机\01、【Winform+WPF+上位机高薪就业VIP班三期】\20211217就业班03期Course40GDI+绘制与自定义控件\01 Winform专题.pptx";
            //string pathto = @"G:\编程学习\C#\.上位机\01、【Winform+WPF+上位机高薪就业VIP班三期】\20211222就业班03期Course41IO与Excel的使用\01 Winform专题.pptx";//不行会出错
            //string path = @"G:\编程学习\C#\.上位机\01、【Winform+WPF+上位机高薪就业VIP班三期】\20211217就业班03期Course40GDI+绘制与自定义控件\20211217就业班03期Course40GDI+绘制与自定义控件.mp4";
            //string pathto = @"G:\编程学习\C#\.上位机\01、【Winform+WPF+上位机高薪就业VIP班三期】\20211222就业班03期Course41IO与Excel的使用\20211217就业班03期Course40GDI+绘制与自定义控件.mp4";//不行
            string path = @"C:\Users\33159\Desktop\kyrie.jpg";
            string pathto = @"G:\编程学习\C#\.上位机\01、【Winform+WPF+上位机高薪就业VIP班三期】\20211222就业班03期Course41IO与Excel的使用\kyrie.jpg";//不行

            char[] data = new char[1024];
            using(StreamReader dr = new StreamReader(path))
            {
                using(StreamWriter sw = new StreamWriter(pathto))
                {
                    while(true)
                    {
                        int roount = dr.Read(data, 0, data.Length);
                        if (roount == 0) break;
                        sw.Write(data, 0, roount);
                    }
                    
                }
            }
        }
       
        int size = 1024 * 1024 * 5;
        byte[] bytes;
        FileStream fr;
        FileStream fw;
        /// <summary>
        /// 文件流读写 视频、文本、ppt、图片
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button2_Click(object sender, EventArgs e)
        {
            //string path = @"G:\编程学习\C#\.上位机\01、【Winform+WPF+上位机高薪就业VIP班三期】\20211217就业班03期Course40GDI+绘制与自定义控件\20211217就业班03期Course40GDI+绘制与自定义控件.mp4";
            //string pathto = @"G:\编程学习\C#\.上位机\01、【Winform+WPF+上位机高薪就业VIP班三期】\20211222就业班03期Course41IO与Excel的使用\20211217就业班03期Course40GDI+绘制与自定义控件.mp4";
            //string path = @"C:\Users\33159\Desktop\新建 文本文档.txt";
            //string pathto = @"G:\编程学习\C#\.上位机\01、【Winform+WPF+上位机高薪就业VIP班三期】\20211222就业班03期Course41IO与Excel的使用\新建 文本文档.txt";
            //string path = @"G:\编程学习\C#\.上位机\01、【Winform+WPF+上位机高薪就业VIP班三期】\20211217就业班03期Course40GDI+绘制与自定义控件\01 Winform专题.pptx";
            //string pathto = @"G:\编程学习\C#\.上位机\01、【Winform+WPF+上位机高薪就业VIP班三期】\20211222就业班03期Course41IO与Excel的使用\01 Winform专题.pptx";
            string path = @"C:\Users\33159\Desktop\kyrie.jpg";
            string pathto = @"G:\编程学习\C#\.上位机\01、【Winform+WPF+上位机高薪就业VIP班三期】\20211222就业班03期Course41IO与Excel的使用\kyrie.jpg";
            bytes = new byte[size];
            //文件流
            using (fr = new FileStream(path, FileMode.Open, FileAccess.Read))
            {
                using (fw = new FileStream(pathto, FileMode.Create, FileAccess.Write))
                {
                    int count = fr.Read(bytes,0,size);
                    while (count > 0)
                    {
                        fw.Write(bytes, 0, count);
                        count = fr.Read(bytes, 0, size);
                    }
                }
            }
        }

        /// <summary>
        /// 内存流(中转) 图片、ppt、文本、视频
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button3_Click(object sender, EventArgs e)
        {
            string path = @"G:\编程学习\C#\.上位机\01、【Winform+WPF+上位机高薪就业VIP班三期】\20211217就业班03期Course40GDI+绘制与自定义控件\20211217就业班03期Course40GDI+绘制与自定义控件.mp4";
            string pathto = @"G:\编程学习\C#\.上位机\01、【Winform+WPF+上位机高薪就业VIP班三期】\20211222就业班03期Course41IO与Excel的使用\20211217就业班03期Course40GDI+绘制与自定义控件.mp4";
            //string path = @"C:\Users\33159\Desktop\新建 文本文档.txt";
            //string pathto = @"G:\编程学习\C#\.上位机\01、【Winform+WPF+上位机高薪就业VIP班三期】\20211222就业班03期Course41IO与Excel的使用\新建 文本文档.txt";
            //string path = @"G:\编程学习\C#\.上位机\01、【Winform+WPF+上位机高薪就业VIP班三期】\20211217就业班03期Course40GDI+绘制与自定义控件\01 Winform专题.pptx";
            //string pathto = @"G:\编程学习\C#\.上位机\01、【Winform+WPF+上位机高薪就业VIP班三期】\20211222就业班03期Course41IO与Excel的使用\01 Winform专题.pptx";
            //string path = @"C:\Users\33159\Desktop\kyrie.jpg";
            //string pathto = @"G:\编程学习\C#\.上位机\01、【Winform+WPF+上位机高薪就业VIP班三期】\20211222就业班03期Course41IO与Excel的使用\kyrie.jpg";
            bytes = new byte[size];
            //内存流
            MemoryStream ms = new MemoryStream(size);
            using (fr = new FileStream(path, FileMode.Open, FileAccess.Read))
            {
                int count = fr.Read(bytes, 0, size);
                while (count > 0)
                {
                    ms.Write(bytes, 0, count);
                    count = fr.Read(bytes, 0, size);
                }
            }
            //写入流
            using (fw = new FileStream(pathto, FileMode.Create, FileAccess.Write))
            {
                ms.WriteTo(fw);
            }
        }

        /// <summary>
        /// 缓冲流 图片、ppt、文本、视频
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button4_Click(object sender, EventArgs e)
        {
            string path = @"G:\编程学习\C#\.上位机\01、【Winform+WPF+上位机高薪就业VIP班三期】\20211217就业班03期Course40GDI+绘制与自定义控件\20211217就业班03期Course40GDI+绘制与自定义控件.mp4";
            string pathto = @"G:\编程学习\C#\.上位机\01、【Winform+WPF+上位机高薪就业VIP班三期】\20211222就业班03期Course41IO与Excel的使用\20211217就业班03期Course40GDI+绘制与自定义控件.mp4";
            //string path = @"C:\Users\33159\Desktop\新建 文本文档.txt";
            //string pathto = @"G:\编程学习\C#\.上位机\01、【Winform+WPF+上位机高薪就业VIP班三期】\20211222就业班03期Course41IO与Excel的使用\新建 文本文档.txt";
            //string path = @"G:\编程学习\C#\.上位机\01、【Winform+WPF+上位机高薪就业VIP班三期】\20211217就业班03期Course40GDI+绘制与自定义控件\01 Winform专题.pptx";
            //string pathto = @"G:\编程学习\C#\.上位机\01、【Winform+WPF+上位机高薪就业VIP班三期】\20211222就业班03期Course41IO与Excel的使用\01 Winform专题.pptx";
            //string path = @"C:\Users\33159\Desktop\kyrie.jpg";
            //string pathto = @"G:\编程学习\C#\.上位机\01、【Winform+WPF+上位机高薪就业VIP班三期】\20211222就业班03期Course41IO与Excel的使用\kyrie.jpg";
            bytes = new byte[size];
            //文件流
            using (fr = new FileStream(path, FileMode.Open, FileAccess.Read))
            {
                BufferedStream br = new BufferedStream(fr);
                using (fw = new FileStream(pathto, FileMode.Create, FileAccess.Write))
                {
                    BufferedStream bw = new BufferedStream(fw);
                    int count = br.Read(bytes, 0, size);
                    while (count > 0)
                    {
                        bw.Write(bytes, 0, count);
                        count = br.Read(bytes, 0, size);
                    }
                    bw.Close();
                }
                br.Close();
            }
        }

        /// <summary>
        /// 二进制流 图片、ppt、文本、视频
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button5_Click(object sender, EventArgs e)
        {
            string path = @"G:\编程学习\C#\.上位机\01、【Winform+WPF+上位机高薪就业VIP班三期】\20211217就业班03期Course40GDI+绘制与自定义控件\20211217就业班03期Course40GDI+绘制与自定义控件.mp4";
            string pathto = @"G:\编程学习\C#\.上位机\01、【Winform+WPF+上位机高薪就业VIP班三期】\20211222就业班03期Course41IO与Excel的使用\20211217就业班03期Course40GDI+绘制与自定义控件.mp4";
            //string path = @"C:\Users\33159\Desktop\新建 文本文档.txt";
            //string pathto = @"G:\编程学习\C#\.上位机\01、【Winform+WPF+上位机高薪就业VIP班三期】\20211222就业班03期Course41IO与Excel的使用\新建 文本文档.txt";
            //string path = @"G:\编程学习\C#\.上位机\01、【Winform+WPF+上位机高薪就业VIP班三期】\20211217就业班03期Course40GDI+绘制与自定义控件\01 Winform专题.pptx";
            //string pathto = @"G:\编程学习\C#\.上位机\01、【Winform+WPF+上位机高薪就业VIP班三期】\20211222就业班03期Course41IO与Excel的使用\01 Winform专题.pptx";
            //string path = @"C:\Users\33159\Desktop\kyrie.jpg";
            //string pathto = @"G:\编程学习\C#\.上位机\01、【Winform+WPF+上位机高薪就业VIP班三期】\20211222就业班03期Course41IO与Excel的使用\kyrie.jpg";
            bytes = new byte[size];
            fr = new FileStream(path, FileMode.Open, FileAccess.Read);
            fw = new FileStream(pathto, FileMode.Create, FileAccess.Write);
            using (BinaryReader br = new BinaryReader(fr))
            {
                using (BinaryWriter bw = new BinaryWriter(fw))
                {
                    int count = br.Read(bytes, 0, size);
                    while (count > 0)
                    {
                        bw.Write(bytes, 0, count);
                        count = br.Read(bytes, 0, size);
                    }
                }
            }
            fr.Close();
            fw.Close();
        }

        string path = @"G:\编程学习\C#\.上位机\01、【Winform+WPF+上位机高薪就业VIP班三期】\20211217就业班03期Course40GDI+绘制与自定义控件\20211217就业班03期Course40GDI+绘制与自定义控件.mp4";
        string pathto = @"G:\编程学习\C#\.上位机\01、【Winform+WPF+上位机高薪就业VIP班三期】\20211222就业班03期Course41IO与Excel的使用\20211217就业班03期Course40GDI+绘制与自定义控件.mp4";
        //string path = @"C:\Users\33159\Desktop\新建 文本文档.txt";
        //string pathto = @"G:\编程学习\C#\.上位机\01、【Winform+WPF+上位机高薪就业VIP班三期】\20211222就业班03期Course41IO与Excel的使用\新建 文本文档.txt";
        //string path = @"G:\编程学习\C#\.上位机\01、【Winform+WPF+上位机高薪就业VIP班三期】\20211217就业班03期Course40GDI+绘制与自定义控件\01 Winform专题.pptx";
        //string pathto = @"G:\编程学习\C#\.上位机\01、【Winform+WPF+上位机高薪就业VIP班三期】\20211222就业班03期Course41IO与Excel的使用\01 Winform专题.pptx";
        //string path = @"C:\Users\33159\Desktop\kyrie.jpg";
        //string pathto = @"G:\编程学习\C#\.上位机\01、【Winform+WPF+上位机高薪就业VIP班三期】\20211222就业班03期Course41IO与Excel的使用\kyrie.jpg";
        /// <summary>
        /// 异步复制大文件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private async void button6_Click(object sender, EventArgs e)
        {
            
            await ReadFileAsync02(path);
        }
        private async Task ReadFileAsync02(string pathFName)
        {
            Console.WriteLine($"异步读:{Thread.CurrentThread.ManagedThreadId}");
            bytes = new byte[size];
            using (fr = new FileStream(pathFName, FileMode.Open, FileAccess.Read, FileShare.Read, size, true))
            {
                using (fw = new FileStream(pathto, FileMode.Append, FileAccess.Write, FileShare.None, size, true))
                {
                    int count = 0;
                    count = await fr.ReadAsync(bytes, 0, bytes.Length);
                    while (count != 0)
                    {
                        await fw.WriteAsync(bytes, 0, count);
                        count = await fr.ReadAsync(bytes, 0, bytes.Length);
                    }
                }
            }
            Console.WriteLine($"异步复制完成！");
        }
    }
}
